// pages/cart/cart.js
Page({
  data: {
    cartItems: [],      // 购物车中的商品
    totalAmount: 0      // 购物车总金额
  },

  // 页面显示时触发的生命周期函数
  onShow: function() {
    this.fetchCartItems() // 获取购物车内容
  },

  // 获取购物车内容的方法
  fetchCartItems: function() {
    const userId = wx.getStorageSync('userId') // 获取用户ID
    if (!userId) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      return
    }

    // 调用云函数获取购物车内容
    wx.cloud.callFunction({
      name: 'getCart',
      data: {
        userId: userId
      },
      success: res => {
        if (res.result.success) {
          const items = res.result.data
          let total = 0
          items.forEach(item => {
            total += item.product.price * item.quantity
          })
          this.setData({
            cartItems: items,
            totalAmount: total
          })
        } else {
          wx.showToast({
            title: '获取购物车失败',
            icon: 'none'
          })
        }
      },
      fail: err => {
        wx.showToast({
          title: '调用失败',
          icon: 'none'
        })
        console.error('调用云函数失败', err)
      }
    })
  },

  // 数量减少事件处理函数
  decreaseQuantity: function(e) {
    const id = e.currentTarget.dataset.id
    const item = this.data.cartItems.find(item => item._id === id)
    if (item.quantity > 1) {
      this.updateCartItem(id, item.quantity - 1)
    }
  },

  // 数量增加事件处理函数
  increaseQuantity: function(e) {
    const id = e.currentTarget.dataset.id
    const item = this.data.cartItems.find(item => item._id === id)
    if (item.quantity < item.product.stock) {
      this.updateCartItem(id, item.quantity + 1)
    } else {
      wx.showToast({
        title: '库存不足',
        icon: 'none'
      })
    }
  },

  // 数量输入变化事件处理函数
  onQuantityChange: function(e) {
    const id = e.currentTarget.dataset.id
    let quantity = parseInt(e.detail.value)
    if (isNaN(quantity) || quantity < 1) {
      quantity = 1
    }
    const item = this.data.cartItems.find(item => item._id === id)
    if (quantity > item.product.stock) {
      quantity = item.product.stock
      wx.showToast({
        title: '库存不足',
        icon: 'none'
      })
    }
    this.updateCartItem(id, quantity)
  },

  // 更新购物车商品数量的方法
  updateCartItem: function(id, newQuantity) {
    wx.cloud.callFunction({
      name: 'updateCartItem',
      data: {
        cartItemId: id,
        quantity: newQuantity
      },
      success: res => {
        if (res.result.success) {
          this.fetchCartItems() // 重新获取购物车内容
        } else {
          wx.showToast({
            title: '更新失败',
            icon: 'none'
          })
        }
      },
      fail: err => {
        wx.showToast({
          title: '调用失败',
          icon: 'none'
        })
        console.error('调用云函数失败', err)
      }
    })
  },

  // 删除购物车商品的方法
  removeItem: function(e) {
    const id = e.currentTarget.dataset.id
    wx.cloud.callFunction({
      name: 'removeCartItem',
      data: {
        cartItemId: id
      },
      success: res => {
        if (res.result.success) {
          this.fetchCartItems() // 重新获取购物车内容
        } else {
          wx.showToast({
            title: '删除失败',
            icon: 'none'
          })
        }
      },
      fail: err => {
        wx.showToast({
          title: '调用失败',
          icon: 'none'
        })
        console.error('调用云函数失败', err)
      }
    })
  },

  // 结算按钮点击事件处理函数
  checkout: function() {
    const userId = wx.getStorageSync('userId')
    if (!userId) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      return
    }

    // 调用云函数进行结算操作
    wx.cloud.callFunction({
      name: 'checkout',
      data: {
        userId: userId
      },
      success: res => {
        if (res.result.success) {
          wx.showToast({
            title: '结算成功',
            icon: 'success'
          })
          this.fetchCartItems() // 重新获取购物车内容
          // 可以跳转到订单页面
        } else {
          wx.showToast({
            title: res.result.message || '结算失败',
            icon: 'none'
          })
        }
      },
      fail: err => {
        wx.showToast({
          title: '调用失败',
          icon: 'none'
        })
        console.error('调用云函数失败', err)
      }
    })
  }
})
